package xyz.xwls.bootadmin.sys.service;

import xyz.xwls.bootadmin.sys.domain.Auth;
import xyz.xwls.bootadmin.sys.domain.User;
import xyz.xwls.bootadmin.sys.vo.PageResult;
import xyz.xwls.bootadmin.sys.vo.UserVo;

import java.util.List;
import java.util.Set;

/**
 * @author WZW
 * @date 2020/4/1
 */
public interface UserService {
    /**
     * 根据用户名获取后台管理员
     * @param username 用户名
     * @return 用户
     */
    User getByUsername(String username);

    /**
     * 注册功能
     * @param user 要注册的用户
     * @return 注册成功的用户
     */
    User register(User user);

    /**
     * 登录功能
     * @param username 用户名
     * @param password 密码
     * @return 生成的JWT的token
     */
    String login(String username, String password);

    /**
     * 获取用户所有权限
     * @param id 用户编号
     * @return 用户的权限
     */
    Set<Auth> getPermissionList(Long id);

    /**
     * 获取用户列表
     * @return 用户列表
     */
    List<UserVo> list();

    /**
     * 按条件分页获取用户列表
     * @param page 页码
     * @param limit 每页条数
     * @param user 查询条件
     * @return 用户列表
     */
    PageResult<UserVo> list(int page, int limit, User user);

    /**
     * 保存新用户
     * @param user 用户信息
     * @return 保存成功的用户信息
     */
    User save(User user);

    /**
     * 修改用户信息
     * @param user 要修改的用户信息
     * @return 修改成功的用户
     */
    User update(User user);
}
